<?php

require_once("dao/Dao.php");

/**
 * DAO de l'objet Commande.
 *
 * @author Ludovic
 */
class CommandeDao extends Dao{


	protected static $tableName = "commande";
	protected static $tableNameOm = "ligne_commande_om";
	protected static $tableNameLC = "ligne_commande";
	
	/**
	 * Recherche commandes des clients
	 */
	public static function getAll(){
		return parent::find(CommandeDao::$tableName);
	}
	/**
	 * Recherche raison social des clients
	 */
	public static function getAllRS(){
		return parent::query('SELECT c . * , f.raison_social FROM commande AS c, fiche_client AS f WHERE c.code_client_hto = f.code_client_hto');
	}
	

	/**
	 * Création d'un nouveau client
	 */
	function creer($code_client_hto){
		parent::exec('INSERT INTO commande(code_client_hto,statut) values("'.$code_client_hto.'","en cours")');
		$id =  parent::query("SELECT LAST_INSERT_ID() as id");
		return $id[0]['id'];
	}
	
	/**
	 * Retourne toutes les commandes d'un client
	 */
	public static function findByCodeClient($code_client_hto){
		return parent::find(CommandeDao::$tableName,'code_client_hto="'.$code_client_hto.'"');
	}

	/**
	 * Retourne la commande en fonction de son id
	 */
	public static function findByCommandeId($commande_id){
		$commandes = parent::find(CommandeDao::$tableName,'id="'.$commande_id.'"');
		if (empty($commandes)) return null;
		return $commandes[0];
	}
        
	/**
	 * Retourne la commande et ses tables liées sous forme d'objet
	 */
	public static function findByCommandeIdObjet($commande_id){
		$result = parent::find('view_commandes','commande_id="'.$commande_id.'"');
                //formattage client
                $ret['client']['id'] = $result[0]['client_id'];
                $ret['client']['nom'] = $result[0]['nom'];
                $ret['client']['prenom'] = $result[0]['prenom'];
                $ret['client']['adresse'] = $result[0]['adresse'];
                $ret['client']['cp'] = $result[0]['cp'];
                $ret['client']['ville'] = $result[0]['ville'];
                $ret['client']['pays'] = $result[0]['pays'];
                $ret['client']['raison_social'] = $result[0]['raison_social'];
                $ret['client']['rcs'] = $result[0]['rcs'];
                $ret['client']['ape'] = $result[0]['ape'];
                $ret['client']['activite'] = $result[0]['activite'];
                $ret['client']['tel_fix'] = $result[0]['tel_fix'];
                $ret['client']['tel_fax'] = $result[0]['tel_fax'];
                $ret['client']['tel_mobile'] = $result[0]['tel_mobile'];
                $ret['client']['email'] = $result[0]['email'];
                $ret['client']['siret'] = $result[0]['siret'];
                $ret['client']['code_client_hto'] = $result[0]['code_client_hto'];
                //formattage commande
                $ret['commande']['id'] = $result[0]['commande_id'];
                $ret['commande']['date_creation'] = $result[0]['date_creation'];
                $ret['commande']['date_traitement'] = $result[0]['date_traitement'];
                $ret['commande']['pdf'] = $result[0]['pdf'];
                //formattage lignes
                foreach ($result as $key => $value) {
                    $ret['lignes'][$key]['msisdn'] = $value['msisdn'];
                    $ret['lignes'][$key]['numero_rio'] = $value['numero_rio'];
                    $ret['lignes'][$key]['date_souhaite'] = $value['date_souhaite'];
                    $ret['lignes'][$key]['prix'] = $value['prix'];
                    if(!is_null($value['libelle']) && !is_null($value['terminal_prix']) ){
                        $ret['lignes'][$key]['equipement']['libelle'] = $value['libelle'];
                        $ret['lignes'][$key]['equipement']['terminal_prix'] = $value['terminal_prix'];
                    }
                    $ret['lignes'][$key]['utilisateur'] = $value['utilisateur'];
                    $ret['lignes'][$key]['carte_sim'] = $value['carte_sim'];
                    $ret['lignes'][$key]['offre_nom'] = $value['offre_nom'];
                    $ret['lignes'][$key]['engagement'] = $value['engagement'];
                    $ret['lignes'][$key]['optionsMobiles'] = self::getLignesOmById($value['ligne_id']);
                    
            }

            return json_decode(json_encode($ret));
	}
	
	/**
	 * Retourne la commande en fonction du n° client
	 */
	public static function findByCommandeHto($code_client_hto){
		$commandes = parent::find(CommandeDao::$tableName,'code_client_hto="'.$code_client_hto.'"');
		if (empty($commandes)) return null;
		return $commandes[0];
	}

	/**
	 * Retourne la ligne de la commande en fonction du numéro de SIM
	 */
	public static function findLigneBySIM($sim){
		$lignes = parent::find("ligne_commande",'carte_sim="'.$sim.'"');
		if (empty($lignes)) return null;
		return $lignes[0];
	}
	
	/**
	 * Retourne la ligne de la commande en fonction de l'id
	 */
	public static function findLigneById($id){
		$lignes = parent::find("ligne_commande",'id="'.$id.'"');
		if (empty($lignes)) return null;
		return $lignes[0];
	}

	/**
	 * Retourne la ligne de la commande en fonction du numéro de subscriber
	 */
	public static function findLigneBySubscriberNumber($subscriberNumber){
		$lignes = parent::find("ligne_commande",'subscriber_number="'.$subscriberNumber.'"');
		if (empty($lignes)) return null;
		return $lignes[0];
	}
	
	/**
	 * Retourne la ligne de la commande en fonction du numéro
	 */
	public static function findLigneByMsisdn($msisdn){
		$lignes = parent::find("ligne_commande",'msisdn="'.$msisdn.'"');
		if (empty($lignes)) return null;
		return $lignes[0];
	}
	
	/**
	 * Retourne tous les msisdn 
	 */
	public static function findAllLigne(){
		$lignes = parent::query('SELECT msisdn FROM ligne_commande WHERE msisdn <> "" ');

		for($i=0;$i<count($lignes);$i++)
		{
			$msisdn = $lignes[$i]['msisdn'];
			$lignes_commande[] = $msisdn;
		}
		//var_dump($lignes_commande);
		return $lignes_commande;
	}

	/**
	 * Retourne toutes les lignes d'une commande
	 */
	public static function getLignesCommandeMobile($commande_id){
		$commandes = parent::query('SELECT distinct l.*, om.nom as offre_mobile_nom, l.utilisateur as utilisateur FROM ligne_commande l,ve_offre_mobile om WHERE l.id_commande="'.$commande_id.'" AND om.id=l.offre AND type_offre = "mobile"');
		return $commandes;
	}
	
	/**
	 * Retourne toutes les lignes d'une commande Fixe 
	 */
	public static function getLignesCommandeFixe($commande_id){
		$commandes = parent::query('SELECT distinct l.*, ve_offre_fixe.nom as offre_mobile_nom FROM ligne_commande l,ve_offre_fixe WHERE l.id_commande="'.$commande_id.'" AND ve_offre_fixe.id=l.offre AND (type_offre IN ("vga","voip","vga_num","xdsl"))');
		return $commandes;
	}
	
	/**
	 * Retourne toutes les options d'une commande Fixe 
	 */
	public static function getOptionsLignesCommandeFixe($commande_id){
		$commandes = parent::query('SELECT distinct l.*, ve_option_fixe.nom as offre_mobile_nom FROM ligne_commande l,ve_option_fixe WHERE l.id_commande="'.$commande_id.'" AND ve_option_fixe.id=l.offre AND (type_offre IN ("vga_option","voip_option","vga_num_option","xdsl_option"))');
		
		return $commandes;
	}
	
	/**
	 * Retourne toutes les lignes d'une commande ADSL
	 */
	public static function getLignesCommandeAdsl($commande_id){
		$commandes = parent::query('SELECT distinct l.*, ve_offre_fixe.nom as offre_mobile_nom FROM ligne_commande l,ve_offre_fixe WHERE l.id_commande="'.$commande_id.'" AND ve_offre_fixe.id=l.offre AND type_offre = "xdsl"');
		//$commandes2 = parent::query('SELECT * FROM ligne_commande  WHERE id_commande="'.$commande_id.'" AND ndi_xdsl <> "" ');
		//$commandes = array_merge($commandes,$commandes2);
		return $commandes;
	}
	
	
	/**
	 * Retourne toutes les lignes de ligne_commande_om
	 */
	public static function getLignesOm(){
		$options_mobiles = parent::query('SELECT * FROM ligne_commande_om,ve_option_mobile WHERE ve_option_mobile.id=ligne_commande_om.id_option_mobile');
		return $options_mobiles;
	}
	
	/**
	 * Retourne toutes les lignes de ligne_commande_om de l'id choisie
	 */
	public static function getLignesOmById($commande_id){
		$options_mobiles = parent::query('SELECT * FROM ligne_commande_om,ve_option_mobile WHERE ve_option_mobile.id=ligne_commande_om.id_option_mobile AND id_ligne_commande="'.$commande_id.'"');
		return $options_mobiles;
	}
	
	/**
	 * Retourne les infos du terminal
	 */
	public static function Terminal($id){
		$terminal = parent::query('SELECT * FROM vente_terminal_mobile WHERE id="'.$id.'"');
		if($terminal){return $terminal[0];}
	}

	/**
	 * Retourne les infos des equipements fixe commandés
	 */
	public static function getEquipementFixeCommande($id){
		$requete = parent::query('SELECT * FROM commande_equipement_fixe WHERE id_ligne_commande="'.$id.'"');
		return $requete;
	}
	
	/**
	 * Retourne les infos du forfait
	 */
	public static function Forfait($id){
		$forfait = parent::query('SELECT * FROM ve_offre_mobile WHERE id="'.$id.'"');
		return $forfait[0];
	}

	/**
	 * Met à jour le statut d'une commande.
	 * @param String $commande_id L'identifiant de la commande.
	 * @param String $statut Le statut de la commande
	 * @return boolean true si la mise à jour c'est bien déroulée.
	 */
	public static function changerStatut($commande_id,$statut){
		
		// Si le statut passe à traité alors la date de traitement doit être mise à jour
		if ($statut == "traitée"){
			return parent::exec('UPDATE commande SET statut="'.$statut.'", date_traitement=NOW() WHERE id='.$commande_id);
		} 
		
		return parent::exec('UPDATE commande SET statut="'.$statut.'" WHERE id='.$commande_id);		
	}
	
														/********************************************
														 * 	Ajout d'une ligne mobile à une commande *
														 ********************************************/

	public static function ajouterLigneMobile($id_commande,$utilisateur,$carte_sim,$msisdn,$numero_rio,$date_souhaite,$terminal_mobile,$numero_imei,$abonnement_mobile,$options_mobile,$engagement,$reduction_abonnement,$reduction_min_national,$reduction_min_international,$reduction_option_mobile,$reduction_grille_tarifaire,$reduction_min_mobile,$appel_interne){
		
	//tableaux des offres suivant équipement	
	$colonne_offre_ss_terminal = array(
					"0" =>"pv0m_prix_seul",
					"12" =>"pv12m_prix_seul",
					"24" =>"pv24m_prix_seul",
					"36" =>"pv36m_prix_seul"
					);
	$colonne_offre_terminal = array(
					"0" =>"pv0m_avec_equipement",
					"12" =>"pv12m_avec_equipement",
					"24" =>"pv24m_avec_equipement",
					"36" =>"pv36m_avec_equipement"
					);	
	//infos de l'offre selectionnée							
	$forfait =  parent::queryOne('SELECT * FROM ve_offre_mobile WHERE id = "'.$abonnement_mobile.'" ');	
	
	//infos de l'équipement selectionné
	$terminal = parent::queryOne('SELECT * FROM vente_terminal_mobile WHERE id = "'.$terminal_mobile.'" ');
	//tableau des tarifs de l'équipement
	$tab_prix_terminal = array(
					"tarif_nu" =>$terminal['tarif_nu'],
					"tarif_pack1g" =>$terminal['tarif_pack1g'],
					"tarif_compteur" =>$terminal['tarif_compteur'],
					"tarif_offre_voix" =>$terminal['tarif_offre_voix'],
					"tarif_pack2g" =>$terminal['tarif_pack2g'],
					"tarif_pack3g" =>$terminal['tarif_pack3g']
					);	
	
	//calcul du prix final de l'offre et du terminal
	if($terminal_mobile<>'')
	{
		$forfait_prix = $forfait[$colonne_offre_terminal[$engagement]];
		$terminal_prix =  $tab_prix_terminal[$forfait['tarif_telephone']];
	}else{
		$forfait_prix = $forfait[$colonne_offre_ss_terminal[$engagement]];
		$terminal_prix = '';
	}
		//$insertOk = parent::exec('INSERT INTO ligne_commande (id_commande,utilisateur,carte_sim,msisdn,numero_rio,date_souhaite,terminal_mobile,numero_imei,abonnement_mobile,engagement,terminal_prix,abonnement_mobile_prix,abonnement,minute_national,minute_international,mobil,grille_tarifaire,option_mobile) values ("'.$id_commande.'","'.$utilisateur.'","'.$carte_sim.'","'.$msisdn.'","'.$numero_rio.'","'.$date_souhaite.'","'.$terminal_mobile.'","'.$numero_imei.'","'.$abonnement_mobile.'","'.$engagement.'","'.$terminal_prix.'","'.$forfait_prix.'","'.$reduction_abonnement.'","'.$reduction_min_national.'","'.$reduction_min_international.'","'.$reduction_min_mobile.'","'.$reduction_grille_tarifaire.'","'.$reduction_option_mobile.'")');
		
		$insertOk = parent::exec('INSERT INTO ligne_commande (id_commande, utilisateur, carte_sim, msisdn, numero_rio, date_souhaite, terminal_mobile, numero_imei, type_offre, offre, engagement, terminal_prix, prix, abonnement, minute_national, minute_international, mobil, grille_tarifaire, option_mobile, interne) values ("'.$id_commande.'", "'.$utilisateur.'", "'.$carte_sim.'", "'.$msisdn.'", "'.$numero_rio.'", "'.$date_souhaite.'", "'.$terminal_mobile.'", "'.$numero_imei.'", "mobile", "'.$abonnement_mobile.'", "'.$engagement.'", "'.$terminal_prix.'", "'.$forfait_prix.'", "'.$reduction_abonnement.'", "'.$reduction_min_national.'", "'.$reduction_min_international.'", "'.$reduction_min_mobile.'", "'.$reduction_grille_tarifaire.'", "'.$reduction_option_mobile.'", "'.$appel_interne.'" )');
		
		if (!$insertOk){
			return false;
		}
		
		$result =  parent::queryOne("SELECT LAST_INSERT_ID() as id");
		foreach ($options_mobile as $option_mobile){
			
				//calcul du prix final de l'option
				$option =  parent::queryOne('SELECT * FROM ve_option_mobile WHERE id = "'.$option_mobile.'" ');
				if($terminal_mobile<>'')
				{
				$option_prix = $option['prix_avec_equipement'];
				}else{
				$option_prix = $option['prix_seul'];
				}
		//insertion en base	des options	
		parent::exec('INSERT INTO ligne_commande_om(id_ligne_commande,id_option_mobile,prix_option_mobile) VALUES ("'.$result['id'].'","'.$option_mobile.'","'.$option_prix.'");');
		}
		return $result['id'];
	}

														/**************************************************
														 * Modification d'une ligne mobile à une commande *
														 **************************************************/
														 
	public static function updateLigneMobile($id,$utilisateur,$carte_sim,$msisdn,$numero_rio,$date_souhaite,$terminal_mobile,$numero_imei,$abonnement_mobile,$options_mobile,$engagement,$reduction_abonnement,$reduction_min_national,$reduction_min_international,$reduction_option_mobile,$reduction_grille_tarifaire,$reduction_min_mobile,$appel_interne){
		
		//tableaux des offres suivant équipement	
	$colonne_offre_ss_terminal = array(
					"0" =>"pv0m_prix_seul",
					"12" =>"pv12m_prix_seul",
					"24" =>"pv24m_prix_seul",
					"36" =>"pv36m_prix_seul"
					);
	$colonne_offre_terminal = array(
					"0" =>"pv0m_avec_equipement",
					"12" =>"pv12m_avec_equipement",
					"24" =>"pv24m_avec_equipement",
					"36" =>"pv36m_avec_equipement"
					);	
	//infos de l'offre selectionnée							
	$forfait =  parent::queryOne('SELECT * FROM ve_offre_mobile WHERE id = "'.$abonnement_mobile.'" ');	
	
	//infos de l'équipement selectionné
	$terminal = parent::queryOne('SELECT * FROM vente_terminal_mobile WHERE id = "'.$terminal_mobile.'" ');
	
	//tableau des tarifs de l'équipement
	$tab_prix_terminal = array(
					"tarif_nu" =>$terminal['tarif_nu'],
					"tarif_pack1g" =>$terminal['tarif_pack1g'],
					"tarif_compteur" =>$terminal['tarif_compteur'],
					"tarif_offre_voix" =>$terminal['tarif_offre_voix'],
					"tarif_pack2g" =>$terminal['tarif_pack2g'],
					"tarif_pack3g" =>$terminal['tarif_pack3g']
					);	
	
	//calcul du prix final de l'offre et du terminal
	if($terminal_mobile<>'')
	{
		$forfait_prix = $forfait[$colonne_offre_terminal[$engagement]];
		$terminal_prix =  $tab_prix_terminal[$forfait['tarif_telephone']];
	}else{
		$forfait_prix = $forfait[$colonne_offre_ss_terminal[$engagement]];
		$terminal_prix = '';
	}
	
		parent::exec('UPDATE ligne_commande SET utilisateur="'.$utilisateur.'",carte_sim="'.$carte_sim.'",msisdn="'.$msisdn.'",numero_rio="'.$numero_rio.'",date_souhaite="'.$date_souhaite.'", terminal_mobile="'.$terminal_mobile.'", numero_imei="'.$numero_imei.'", engagement="'.$engagement.'", offre="'.$abonnement_mobile.'",terminal_prix="'.$terminal_prix.'",prix="'.$forfait_prix.'", abonnement="'.$reduction_abonnement.'", minute_national="'.$reduction_min_national.'", minute_international="'.$reduction_min_international.'", mobil="'.$reduction_min_mobile.'", grille_tarifaire="'.$reduction_grille_tarifaire.'", option_mobile="'.$reduction_option_mobile.'", interne="'.$appel_interne.'" WHERE id="'.$id.'"');

		//maj en base des options, suppression puis ajout
		CommandeDao::delete("ligne_commande_om","id_ligne_commande=".$id);
		foreach ($options_mobile as $option_mobile){
				//calcul du prix final de l'option
				$option =  parent::queryOne('SELECT * FROM ve_option_mobile WHERE id = "'.$option_mobile.'" ');
				if($terminal_mobile<>'')
				{
				$option_prix = $option['prix_avec_equipement'];
				}else{
				$option_prix = $option['prix_seul'];
				}
		//insertion en base	des options	
		parent::exec('INSERT INTO ligne_commande_om (id_ligne_commande,id_option_mobile,prix_option_mobile) VALUES ("'.$id.'","'.$option_mobile.'","'.$option_prix.'");');
		}
		return true;
	}

	/**
	 * Ajout d'une ligne fixe
	 */
	 
	public static function ajouterLigneFixe($id_commande,$ndi,$sda,$id_offre,$abonnement_quantite,$temps,$prix,$jours,$horaires,$tab_materiel,$engagement,$code_client,$fixe,$mobile,$international,$identifiant_adv,$abonnement_reduc,$minute_national,$minute_international,$grille_tarifaire,$fax_to_mail,$forfait_partage,$raison_social,$siret,$ape,$adresse,$cp,$ville,$batiment,$escalier,$etage,$porte,$corespondant,$telephone,$type_ligne,$ligne,$interne){
		global $bdd, $logger;
		
			$requete = $bdd->prepare('INSERT INTO ligne_commande( id_commande, ndi, sda, type_offre, offre, nbr_offre, voice_status, forfait_jours, forfait_horaires, engagement, prix, fixe, mobiles, international, identifiant_adv, abonnement, minute_national, minute_international, grille_tarifaire, fax_to_mail, forfait_partage, raison_social, siret, ape, adresse, cp, ville, batiment, escalier, etage, porte, corespondant, telephone, type_ligne,ligne,interne) values ("'.$id_commande.'", "'.$ndi.'", "'.$sda.'", "'.$type_ligne.'","'.$id_offre.'", "'.$abonnement_quantite.'", "'.$temps.'","'.$jours.'","'.$horaires.'","'.$engagement.'", "'.$prix.'", "'.$fixe.'", "'.$mobile.'", "'.$international.'", "'.$identifiant_adv.'", "'.$abonnement_reduc.'", "'.$minute_national.'", "'.$minute_international.'", "'.$grille_tarifaire.'", "'.$fax_to_mail.'", "'.$forfait_partage.'","'.$raison_social.'","'.$siret.'","'.$ape.'","'.$adresse.'", "'.$cp.'", "'.$ville.'","'.$batiment.'", "'.$escalier.'", "'.$etage.'", "'.$porte.'", "'.$corespondant.'", "'.$telephone.'", "'.$type_ligne.'","'.$ligne.'", "'.$interne.'")');
			$requete->execute();
			//var_dump($requete);
			$id_insert = $bdd->lastInsertId();
		
		$count_materiel=count($tab_materiel['libelle']);
		//break;
		if($tab_materiel['libelle']!=''){
			for($i=0;$i<$count_materiel;$i++)//insertion dans la table du matériel
			{
				parent::exec('INSERT INTO commande_equipement_fixe (id_ligne_commande, code_client, equipement, quantite, prix, duree_financement, date_achat) 
				values ("'.$id_insert.'","'.$code_client.'","'.$tab_materiel['libelle'][$i].'","'.$tab_materiel['q'][$i].'","'.$tab_materiel['prix'][$i].'","'.$tab_materiel['duree_financement'][$i].'","'.date("Y/m/d 00:00:00").'")');
			}
		}
		
		return true;
	}
	
	/**
	 * Ajout d'une option de ligne fixe
	 */
	public static function ajouterOptionFixe($id_commande,$ndi,$type_ligne,$nom,$temps,$prix,$jours,$horaires,$fixe,$mobile,$international)
	{
		global $bdd, $logger;
		$requete = $bdd->prepare('INSERT INTO ligne_commande(id_commande, ndi, type_offre, offre, abonnement, prix, forfait_jours, forfait_horaires, fixe, mobiles, international) values ("'.$id_commande.'", "'.$ndi.'", "'.$type_ligne.'","'.$nom.'", "'.$temps.'", "'.$prix.'","'.$jours.'","'.$horaires.'", "'.$fixe.'", "'.$mobile.'", "'.$international.'")');
			$requete->execute();
	}
	
	/**
	 * Retourne toutes les options fixes
	 */
	public static function getOptionsFixe(){
		$options_fixe = parent::query('SELECT * FROM ligne_commande,ve_option_fixe WHERE ligne_commande.offre = ve_option_fixe.id AND (type_offre = "vga_option" OR type_offre = "voip_option" OR type_offre = "vga_num_option") ');
		return $options_fixe;
	}
	
	/**
	 * Retourne les options fixes d'une ligne
	 */
	public static function getOptionsFixeByNdi($commande_id,$ndi){
		$options_fixe = parent::query('SELECT * FROM ligne_commande WHERE id_commande = "'.$commande_id.'" AND ndi = "'.$ndi.'" AND type_offre IN ("vga_option","vga_num_option","voip_option","xdsl_option")');
		return $options_fixe;
	}
	
	/**
	 * Modification d'une ligne fixe
	 */
	public static function modifierLigneFixe($id_ligne_commande,$id_commande,$ndi,$sda,$nom,$abonnement,$quantite,$temps,$prix,$jours,$horaires,$tab_materiel,$engagement,$code_client,$fixe,$mobile,$international,$identifiant_adv,$abonnement_reduc,$minute_national,$minute_international,$grille_tarifaire,$fax_to_mail,$forfait_partage,$raison_social,$siret,$ape,$adresse,$cp,$ville,$batiment,$escalier,$etage,$porte,$corespondant,$telephone,$type_ligne,$ligne,$interne){
		global $bdd, $logger;
		
			$requete = $bdd->prepare('UPDATE ligne_commande SET ndi = "'.$ndi.'", sda = "'.$sda.'", offre = "'.$abonnement.'", nbr_offre = "'.$quantite.'", voice_status = "'.$temps.'", forfait_jours = "'.$jours.'", forfait_horaires = "'.$horaires.'", engagement = "'.$engagement.'", prix = "'.$prix.'", fixe = "'.$fixe.'", mobiles = "'.$mobile.'", international = "'.$international.'",identifiant_adv = "'.$identifiant_adv.'", abonnement = "'.$abonnement_reduc.'", minute_national = "'.$minute_national.'",minute_international = "'.$minute_international.'", grille_tarifaire = "'.$grille_tarifaire.'", fax_to_mail = "'.$fax_to_mail.'",forfait_partage ="'.$forfait_partage.'",raison_social ="'.$raison_social.'", siret = "'.$siret.'", ape = "'.$ape.'", adresse = "'.$adresse.'", cp = "'.$cp.'",ville = "'.$ville.'", batiment = "'.$batiment.'", escalier = "'.$escalier.'",etage = "'.$etage.'", porte = "'.$porte.'", corespondant ="'.$corespondant.'", telephone = "'.$telephone.'",type_ligne = "'.$type_ligne.'",ligne= "'.$ligne.'",interne = "'.$interne.'" WHERE id = "'.$id_ligne_commande.'" ');
			$requete->execute();
		
		//suppression du materiel
		parent::exec('DELETE FROM commande_equipement_fixe WHERE id_ligne_commande = "'.$id_ligne_commande.'" ');
			
		$count_materiel=count($tab_materiel['libelle']);
		for($i=0;$i<$count_materiel;$i++)//insertion dans la table du matériel
		{
			parent::exec('INSERT INTO commande_equipement_fixe(id_ligne_commande, code_client, equipement, quantite, prix, duree_financement, date_achat) 
			values("'.$id_ligne_commande.'","'.$code_client.'","'.$tab_materiel['libelle'][$i].'","'.$tab_materiel['q'][$i].'","'.$tab_materiel['prix'][$i].'","'.$tab_materiel['duree_financement'][$i].'","'.date("Y/m/d 00:00:00").'")');
		}
		
		//suppression des options, elles sont ajoutés par ajout-ligne-fixe.php
		$options_ligne = CommandeDao::getOptionsFixeByNdi($id_commande,$ndi);
		foreach($options_ligne as $option_ligne)
		{
			parent::exec('DELETE FROM ligne_commande WHERE id_commande = "'.$id_commande.'" AND ndi = "'.$ndi.'" AND type_offre IN ("vga_option","vga_num_option","voip_option","xdsl_option")  ');
		}
		
		return true;
	}

	/**
	 * Ajout d'une ligne ADSL 
	 */
	public static function ajouterLigneAdsl($id_commande,$ndi,$abonnement,$quantite,$login_xdsl,$password_xdsl,$adresse_ip_xdsl,$port,$prix,$tab_materiel,$engagement,$code_client,$identifiant_adv,$abonnement_reduc,$grille_tarifaire,$raison_social,$siret,$ape,$adresse,$cp,$ville,$batiment,$escalier,$etage,$porte,$corespondant,$telephone){
		global $bdd, $logger;
		$requete = $bdd->prepare('INSERT INTO `ligne_commande`(id_commande, ndi, type_offre, offre, nbr_offre,login_xdsl, password_xdsl, adresse_ip_xdsl,port,engagement,prix,identifiant_adv,abonnement,grille_tarifaire,raison_social,siret,ape,adresse,cp,ville,batiment,escalier,etage,porte,corespondant,telephone) VALUES ("'.$id_commande.'","'.$ndi.'","xdsl","'.$abonnement.'","'.$quantite.'","'.$login_xdsl.'","'.$password_xdsl.'","'.$adresse_ip_xdsl.'","'.$port.'","'.$engagement.'","'.$prix.'","'.$identifiant_adv.'","'.$abonnement_reduc.'","'.$grille_tarifaire.'","'.$raison_social.'","'.$siret.'","'.$ape.'","'.$adresse.'","'.$cp.'","'.$ville.'","'.$batiment.'","'.$escalier.'","'.$etage.'","'.$porte.'","'.$corespondant.'","'.$telephone.'")');
		$requete->execute();
		$id_insert = $bdd->lastInsertId();
			
		$count_materiel=count($tab_materiel['libelle']);
		if($count_materiel>0){
			for($i=0;$i<$count_materiel;$i++)//insertion dans la table du matériel
			{
				parent::exec('INSERT INTO commande_equipement_fixe (id_ligne_commande, code_client, equipement, quantite, prix, duree_financement, date_achat) 
				values ("'.$id_insert.'","'.$code_client.'","'.$tab_materiel['libelle'][$i].'","'.$tab_materiel['q'][$i].'","'.$tab_materiel['prix'][$i].'","'.$tab_materiel['duree_financement'][$i].'","'.date("Y/m/d 00:00:00").'")');
			}
		}
		return true;
	}
	
	/**
	 * Modification d'une ligne Adsl
	 */
	public static function modifierLigneAdsl($id_ligne_commande,$id_commande,$ndi,$nom_adsl,$quantite,$login_xdsl,$password_xdsl,$adresse_ip_xdsl,$port,$prix,$tab_materiel,$engagement,$code_client,$identifiant_adv,$abonnement_reduc,$grille_tarifaire,$raison_social,$siret,$ape,$adresse,$cp,$ville,$batiment,$escalier,$etage,$porte,$corespondant,$telephone){
		global $bdd, $logger;
			$requete = $bdd->prepare('UPDATE ligne_commande SET ndi = "'.$ndi.'", offre = "'.$nom_adsl.'", nbr_offre = "'.$quantite.'", login_xdsl = "'.$login_xdsl.'", password_xdsl = "'.$password_xdsl.'", adresse_ip_xdsl = "'.$adresse_ip_xdsl.'", port = "'.$port.'", engagement = "'.$engagement.'", prix = "'.$prix.'", identifiant_adv = "'.$identifiant_adv.'", abonnement = "'.$abonnement_reduc.'",grille_tarifaire = "'.$grille_tarifaire.'", raison_social ="'.$raison_social.'", siret = "'.$siret.'", ape = "'.$ape.'", adresse = "'.$adresse.'", cp = "'.$cp.'", ville = "'.$ville.'", batiment = "'.$batiment.'", escalier = "'.$escalier.'", etage = "'.$etage.'", porte = "'.$porte.'", corespondant ="'.$corespondant.'", telephone = "'.$telephone.'" WHERE id = "'.$id_ligne_commande.'" ');
			$requete->execute();
		
		
		//suppression du materiel
		parent::exec('DELETE FROM commande_equipement_fixe WHERE id_ligne_commande = "'.$id_ligne_commande.'" ');
			
		$count_materiel=count($tab_materiel['libelle']);
		for($i=0;$i<$count_materiel;$i++)//insertion dans la table du matériel
		{
			parent::exec('INSERT INTO commande_equipement_fixe(id_ligne_commande, code_client, equipement, quantite, prix, duree_financement, date_achat) 
			values("'.$id_ligne_commande.'","'.$code_client.'","'.$tab_materiel['libelle'][$i].'","'.$tab_materiel['q'][$i].'","'.$tab_materiel['prix'][$i].'","'.$tab_materiel['duree_financement'][$i].'","'.date("Y/m/d 00:00:00").'")');
		}
		
		return true;
	}

	/**
	 * Fonction de mise à jour d'une ligne de commande à partir des status remontés de l'opérateur.
	 * 
	 * @param String $id Identifiant de la ligne de commande à mettre à jour
	 * @param String $subscriberNumber
	 * @param String $ratePlan
	 * @param String $activationDate
	 * @param String $msisdn
	 * @param String $numero_rio
	 * @param String $lineStatus
	 * @param String $lineStatusDate
	 * @param String $portingType
	 * @param String $portingDate
	 * @param String $portingStatus
	 * @param String $portingStatusDate
	 * @param String $portingStatusInfos
	 * @param String $dataStatus
	 * @param String $dataStatusDate
	 * @param String $blackberryStatus
	 * @param String $blackberryStatusDate
	 * @param String $foreignStatus
	 * @param String $foreignStatusDate
	 * @param String $voiceStatus
	 * @param String $voiceStatusDate
	 * @param String $smsStatus
	 * @param String $smsStatusDate
	 * @param String $otherStatus
	 * @param String $otherStatusDate
	 * @return boolean
	 */
	public static function updateLineStatus(
			$id,
			$subscriberNumber,
			$simserial,
			$lastname,
			$firstname,
			$zipcode,
			$ratePlan,
			$activationDate,
			$msisdn, 
			$numero_rio,
			$lineStatus,
			$lineStatusDate, 
			$portingType, 
			$portingDate, 
			$portingStatus, 
			$portingStatusDate, 
			$portingStatusInfos,
			$dataStatus, 
			$dataStatusDate, 
			$blackberryStatus, 
			$blackberryStatusDate, 
			$foreignStatus,
			$foreignStatusDate, 
			$voiceStatus, 
			$jours, 
			$horaires,
			$smsStatus,
			$smsStatusDate, 
			$otherStatus, 
			$otherStatusDate,
			$subvention,
			$mobile,
			$interne
		){
		
		return parent::exec('UPDATE ligne_commande SET			
				subscriber_number = "'.$subscriberNumber.'",
				carte_sim = "'.$simserial.'",
				utilisateur = "'.$firstname.'",
				zipcode = "'.$zipcode.'",
				rate_plan = "'.$ratePlan.'",
				activation_date = "'.$activationDate.'",
				msisdn = "'.$msisdn.'", 
				numero_rio = "'.$numero_rio.'",
				line_status = "'.$lineStatus.'",
				line_status_date = "'.$lineStatusDate.'", 
				porting_type = "'.$portingType.'", 
				porting_date = "'.$portingDate.'", 
				porting_status = "'.$portingStatus.'", 
				porting_status_date = "'.$portingStatusDate.'", 
				porting_status_infos = "'.$portingStatusInfos.'",
				data_status = "'.$dataStatus.'", 
				data_status_date = "'.$dataStatusDate.'", 
				blackberry_status = "'.$blackberryStatus.'", 
				blackberry_status_date = "'.$blackberryStatusDate.'", 
				foreign_status = "'.$foreignStatus.'",
				foreign_status_date = "'.$foreignStatusDate.'", 
				voice_status = "'.$voiceStatus.'",
				forfait_jours = "'.$jours.'",
				forfait_horaires = "'.$horaires.'",
				sms_status = "'.$smsStatus.'",
				sms_status_date = "'.$smsStatusDate.'",
				other_status = "'.$otherStatus.'", 
				other_status_date = "'.$otherStatusDate.'",
				subvention = "'.$subvention.'",
				mobile = "'.$mobile.'",
				interne = "'.$interne.'"
				 WHERE id = "'.$id.'";');
	}

	
	/**
	 * Récupération des offres HA d'une commande.
	 */
	public static function getOffresHAFromLigneCommande($id_ligne){
		return parent::queryOne('SELECT ha.* FROM ha_offre_mobile ha, ve_offre_mobile ve, ligne_commande lc  WHERE lc.id="'.$id_ligne.'"  and lc.offre = ve.id and ve.id_offre_ha=ha.id');
		
	}
	

	/**
	 * Récupération des options HA d'une commande.
	 */
	public static function getOptionsHAFromLigneCommande($id_ligne){
		return  parent::query('SELECT ha.* FROM ha_option_mobile ha, ve_option_mobile ve,ligne_commande_om lc WHERE lc.id_ligne_commande="'.$id_ligne.'" and lc.id_option_mobile = ve.id and ve.id_option_ha=ha.id');
	}
	
	
	/**
	 * Récupération des options VE d'une commande.
	 */
	public static function getOptionsVEFromLigneCommande($id_ligne){
		return  parent::query('SELECT ve.* FROM ligne_commande_om lc, ve_option_mobile ve WHERE lc.id_ligne_commande="'.$id_ligne.'" AND lc.id_option_mobile=ve.id');
	}
        public static function exec($sql) {
            return parent::exec($sql);
        }
		
		
	// Nettoyage de caractères
public static function suppr_spe_char($chaine) {
	$accents = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','.','/');
	$sans = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y',' ',' ');
	return str_replace($accents, $sans, $chaine);
}
	
}